package utils

import "time"

var T = new(DefaultTimeFormatter)

// TimeFormatter 定义时间格式化接口
type TimeFormatter interface {
	GetNowTime() time.Time
	FormatAsRFC3339() string
	FormatAsYYYYMMDD() string
	FormatAsYYYYMMDDHHMMSS() string
	FormatAsCustom(layout string) string
}

// DefaultTimeFormatter 实现 TimeFormatter 接口的结构体
type DefaultTimeFormatter struct{}

// GetNowTime 获取当前时间
func (dtf DefaultTimeFormatter) GetNowTime() time.Time {
	return time.Now()
}

// FormatAsRFC3339 将当前时间格式化为 RFC3339 标准格式
func (dtf DefaultTimeFormatter) FormatAsRFC3339() string {
	now := dtf.GetNowTime()
	return now.Format(time.RFC3339)
}

// FormatAsYYYYMMDD 将当前时间格式化为 YYYY-MM-DD 格式
func (dtf DefaultTimeFormatter) FormatAsYYYYMMDD() string {
	now := dtf.GetNowTime()
	return now.Format("2006-01-02")
}

// FormatAsYYYYMMDDHHMMSS 将当前时间格式化为 YYYY-MM-DD HH:MM:SS 格式
func (dtf DefaultTimeFormatter) FormatAsYYYYMMDDHHMMSS() string {
	now := dtf.GetNowTime()
	return now.Format("2006-01-02 15:04:05")
}

// FormatAsCustom 支持将当前时间进行自定义时间格式化
func (dtf DefaultTimeFormatter) FormatAsCustom(layout string) string {
	now := dtf.GetNowTime()
	return now.Format(layout)
}
